package com.rock.upms.client.util;

import java.util.List;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.UnavailableSecurityManagerException;
import org.apache.shiro.session.InvalidSessionException;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import com.rock.upms.model.UpmsPermission;
import com.rock.upms.model.UpmsRole;
import com.rock.upms.model.dto.PermissionDto;
import com.rock.upms.model.dto.RoleDto;
import com.rock.upms.model.dto.UserDto;
import com.rock.upms.model.dto.UserInfo;

public class UserUtil {

	// 当前登录人工号
	public static String getUsercode() {
		return getPrincipal().getUser().getUsercode();
	}

	// 当前登录人工号
	public static String getSalt() {
		return getPrincipal().getUser().getSalt();
	}

	// 当前登录人工号
	public static UserDto getUser() {
		return getPrincipal().getUser();
	}

	// 当前登录人姓名
	public static String getUsername() {
		return getPrincipal().getUser().getUsername();
	}

	// 当前登录人真实姓名
	public static String getRealname() {
		return getPrincipal().getUser().getRealname();
	}

	// 当前登录人手机号
	public static String getMobilephone() {
		return getPrincipal().getUser().getMobilephone();
	}

	// 当前登录人部门编号
	public static String getDeptCode() {
		return getPrincipal().getUser().getDeptCode();
	}

	// 当前登录人部门名称
	public static String getDeptName() {
		return getPrincipal().getUser().getDeptName();
	}

	// 当前登录人角色列表
	public static List<RoleDto> getRoleList() {
		return getPrincipal().getRoleList();
	}

	// 当前登录人权限列表
	public static List<PermissionDto> getPermissionList() {
		return getPrincipal().getPermissionList();
	}

	// shiro对象
	public static Subject getSubject() {
		return SecurityUtils.getSubject();
	}

	// 所有登录人属性必须在此基础上获取，必须是登录成功后才能获取
	public static UserInfo getPrincipal() {
		try {
			Subject subject = SecurityUtils.getSubject();
			return (UserInfo) subject.getPrincipal();
		} catch (UnavailableSecurityManagerException localUnavailableSecurityManagerException) {
		} catch (InvalidSessionException localInvalidSessionException) {
		}
		return null;
	}

	// shiro 的session 继承了httpSission
	public static Session getSession() {
		try {
			Subject subject = SecurityUtils.getSubject();
			Session session = subject.getSession(false);
			if (session == null) {
				// 为空时创建一个session
				session = subject.getSession();
			}
			if (session != null) {
				return session;
			}
		} catch (InvalidSessionException localInvalidSessionException) {
		}
		return null;
	}
}
